package Leetcode;

/**
 * 给定两个字符串形式的非负整数num1 和num2，计算它们的和并同样以字符串形式返回。
 * 你不能使用任何內建的用于处理大整数的库（比如 BigInteger），也不能直接将输入的字符串转换为整数形式。
 * 输入：num1 = "456", num2 = "77"
 * 输出："533"
 */
public class 力扣415_字符串相加 {
    public static void main(String[] args) {
        System.out.println(addStrings2("55", "67"));
        System.out.println(addStrings2("456", "77"));
    }

    // 从最后开始往前算 自己处理进位
    static String addStrings(String num1, String num2) {
        if (num1 == null) {
            return num2;
        }
        if (num2 == null) {
            return num1;
        }
        int rec = 0;
        StringBuilder builder = new StringBuilder();
        char[] num1Bytes = num1.toCharArray();
        char[] num2Bytes = num2.toCharArray();
        int last1 = num1Bytes.length - 1, last2 = num2Bytes.length - 1;
        while (last1 >= 0 || last2 >= 0) {
            int add = rec;
            if (last1 >= 0) {
                add += num1Bytes[last1] - '0';
            }
            if (last2 >= 0) {
                add += num2Bytes[last2] - '0';
            }
            builder.append(add % 10);
            rec = add / 10;
            last1--;
            last2--;
        }
        if (rec != 0) {
            builder.append(rec);
        }
        return builder.reverse().toString();
    }

    // 反转字符串 利用chat的ascll码 可以对应数字 进行加 自己处理进位
    static String addStrings2(String num1, String num2) {
        if (num1 == null) {
            return num2;
        }
        if (num2 == null) {
            return num1;
        }
        int rec = 0;
        StringBuilder builder = new StringBuilder();
        char[] num1Bytes = new StringBuilder(num1).reverse().toString().toCharArray();
        char[] num2Bytes = new StringBuilder(num2).reverse().toString().toCharArray();
        int length1 = num1Bytes.length;
        int length2 = num2Bytes.length;
        for (int i = 0; i < Math.max(length1, length2); i++) {
            int add = rec;
            if (i < length1) {
                add += num1Bytes[i] - '0';
            }
            if (i < length2) {
                add += num2Bytes[i] - '0';
            }
            builder.append(add % 10);
            rec = add / 10;
        }
        if (rec != 0) {
            builder.append(rec);
        }
        return builder.reverse().toString();
    }

}
